package com.wtpaint.lib.skin;

import android.util.AttributeSet;
import android.view.View;

import java.util.ArrayList;
import java.util.List;

/**
 *
 */
public class ZeusAttribute {
    private static final List<String> mAttributes = new ArrayList<>();
    List<ZeusSkinView> mSkinViews = new ArrayList<>();

    static {
        mAttributes.add("background");
        mAttributes.add("src");

        mAttributes.add("textColor");
        mAttributes.add("drawableLeft");
        mAttributes.add("drawableTop");
        mAttributes.add("drawableRight");
        mAttributes.add("drawableBottom");
    }


    public void load(View view, AttributeSet attrs) {
        List<ZeusSkinPair> skinPairs = new ArrayList<>();
        for (int i = 0; i < attrs.getAttributeCount(); i++) {
            //获得属性名
            String attributeName = attrs.getAttributeName(i);
            //是否符合 需要筛选的属性名
            if (mAttributes.contains(attributeName)) {
                String attributeValue = attrs.getAttributeValue(i);
                //写死了 不管了
                if (attributeValue.startsWith("#")) {
                    continue;
                }
                //资源id
                int resId;
                if (attributeValue.startsWith("?")) {
                    //attr Id
                    int attrId = Integer.parseInt(attributeValue.substring(1));
                    //获得 主题 style 中的 对应 attr 的资源id值
                    resId = ZeusSkinThemeUtils.getResId(view.getContext(), new int[]{attrId})[0];
                } else {
                    // @12343455332
                    resId = Integer.parseInt(attributeValue.substring(1));
                }
                if (resId != 0) {
                    //可以被替换的属性
                    ZeusSkinPair skinPair = new ZeusSkinPair(attributeName, resId);
                    skinPairs.add(skinPair);
                }
            }
        }

        //将View与之对应的可以动态替换的属性集合 放入 集合中
        if (!skinPairs.isEmpty()) {
            ZeusSkinView skinView = new ZeusSkinView(view, skinPairs);
            skinView.applySkin();
            mSkinViews.add(skinView);
        }
    }


    public void applySkin() {
        for (ZeusSkinView mSkinView : mSkinViews) {
            mSkinView.applySkin();
        }
    }
}
